==今天的課題
課本:https://reurl.cc/ROvEv6
綜合案例1:双色球选号
起手式餵狗:https://zh.wikipedia.org/wiki/%E5%8F%8C%E8%89%B2%E7%90%83
由此可知
1.獎號由6紅1藍組成,紅範圍1-33、藍範圍1-16
import random
for blue in range (1,7):
print('blue%d=%d'%(blue,random.randint(1,33)))
print('red=%d'%(random.randint(1,16)))
結果會重複,但樂透好像不能重複
這讓我想到之前的驗證碼練習
既然都有直接隨機字串了,或許random裡會有隨機數字又不重複的方法可以用?
===
結果找到了sample這個方法,他跟randint不同的地方在於一次可以取出一定數量的內容
不過只能輸出字串..也就是說只能輸出個位數字
這時我又想到之前的驗證碼,老師的解答是直接在一個變數裡打上所有的材料
所以我也來試試看
import random
red=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]
blue=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
print('red=%s \nblue=%s'%(random.sample(red,5),random.sample(blue,1)))
搞定
看答案
from random import randrange, randint, sample
def display(balls):
"""
输出列表中的双色球号码
"""
for index, ball in enumerate(balls):
#enumerate=枚舉
if index == len(balls) - 1:
print('|', end=' ')
print('%02d' % ball, end=' ')
#%02d=兩位數佔位符,不夠的用0填充
print()
def random_select():
"""
随机选择一组号码
"""
red_balls = [x for x in range(1, 34)]
selected_balls = []
selected_balls = sample(red_balls, 6)
selected_balls.sort()
selected_balls.append(randint(1, 16))
return selected_balls
#採用的是6紅+1藍的模式,1藍用append加上去的
def main():
n = int(input('机选几注: '))
for _ in range(n):
#_為循環此數的意思
display(random_select())
#display(balls),然後隨機出球
if __name__ == '__main__':
main()
有種「雖然內容都看得懂,但要我模仿還是寫不出來」的感覺,不知道該怎麼辦,不然就先繼續學吧(?
剛開始學程式的人的通病呢
不用擔心
純粹是寫的code不夠多而已
多刷題就好了
還有建議看完解答後重構一下自己的程式碼
不然知識永遠沒有辦法變成經驗
原來如此!感謝前輩大大的分享&建議